package Controle;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;

import Dominio.Artista;
import Dominio.Musica;
import Dominio.Pedido;
import Dominio.Usuario;

public class Persistencia implements Serializable{

	/**
	 * 
	 */	
	private static Persistencia instancia = null;
	private static final long serialVersionUID = 1L;
	
	private ArrayList<Musica> listaMusica;
	private int lastIdMusica;
	
	private ArrayList<Usuario> listaUsuario;
	private int lastIdUsuario;
	
	private ArrayList<Pedido> listaPedido;
	
	private ArrayList<Artista> listaArtista;
	
	private Persistencia(){
		listaMusica = new ArrayList<Musica>(10);
		listaUsuario = new ArrayList<Usuario>(10);
		listaPedido = new ArrayList<Pedido>(10);
		listaArtista = new ArrayList<Artista>(10);
	}
	
	public static Persistencia getPersistencia(){
		if(instancia == null){
			instancia = new Persistencia();
		}
		return instancia;
	}
	
	public void setListaMusica(ArrayList<Musica> _lista){
		listaMusica = new ArrayList<Musica>(10);
		listaMusica = _lista;
	}
	
	public void setListaUsuario(ArrayList<Usuario> _lista){
		listaUsuario = _lista;
	}
	
	public ArrayList<Musica> getListaMusica(){
		return listaMusica;
	}
	
	public ArrayList<Usuario> getListaUsuario(){
		return listaUsuario;
	}
	
	public void setLastIdMusica(int _lastId){
		lastIdMusica = _lastId;
	}
	
	public void setLastIdUsuario(int _lastId){
		lastIdUsuario = _lastId;
	}
	
	public int getLastIdMusica(){
		return lastIdMusica;
	}
	
	public int getLastIdUsuario(){
		return lastIdUsuario;
	}
	
	public void setListaPedidos(ArrayList<Pedido> _lista){
		listaPedido = _lista;
	}
	
	public ArrayList<Pedido> getListaPedidos(){
		return listaPedido;
	}
	
	public void setListaArtista(ArrayList<Artista> _lista){
		listaArtista = _lista;
	}
	
	public ArrayList<Artista> getListaArtistas(){
		return listaArtista;
	}
	

}

class Serializa{


	 public static Persistencia persistencia;
	 public static Serializa instance;
	 
	 public Serializa(){
		 persistencia = Persistencia.getPersistencia();
	 }
	 
	 public static Serializa getSerializa(){
		 if(instance == null){
			 instance = new Serializa();
		 }
		 return instance;
	 }
	 
	 public boolean salvaDados(){		 
		 boolean retorno = false;
		 try{
			   FileOutputStream fileout = new FileOutputStream("banco.ser");

			   ObjectOutputStream objout = new ObjectOutputStream(fileout);

			   objout.writeObject(persistencia);

			   objout.close();
			   
			   retorno = true;
			   }
			   catch(Exception e){e.printStackTrace();}     
		 return retorno;
	 }

	 public boolean carregaDados(){
		 boolean retorno = false;
		  try{

	          FileInputStream filein = new FileInputStream("banco.ser");

	          ObjectInputStream objin = new ObjectInputStream(filein);

	          persistencia = (Persistencia) objin.readObject();

	          objin.close();
	          retorno = true;
	      	}
		  catch(Exception e){e.printStackTrace();}
		 return retorno;  
	}                       
}
